A-2 Dataset-1

Grain Transportation Cartels



Defining Terms & the Context 

Weekly time series data on joint executive committee’s railroad cartel from 1800 to 1886 

Porter, Robert H. “A Study of Cartel Stability: The Joint Executive Committee, 1880-1886.” The Bell Journal of Economics 14, no. 2 (1983): 301–14. https://doi.org/10.2307/3003634.

-The study analyses how the cartel’s pricing strategy evolved over time 

-Oligopoly- market structure with a small number of firms, none of which can keep the others from having significant influence.

-Testing whether fluctuations in the grains’ prices and quantities were due to the change in the cartel’s cooperation level or simply external factors like shifts in demand and cost conditions.

-Cartels tend to oscillate between these two modes of behaviour? Did they do that in This case?

-Behaviours

  • Collusive

    • Firms work together to maximise their joint profits; involves agreements to set prices, limit production, market sharing etc, may artificially restrict supply to raise prices.
  • Noncooperative

    • Firms act independently and compete with each other to focus on their individual prices.

      May lead to price wars, increased production.

-A cartel is a group of independent market participants who collude with each other as well as agreeing not to compete with each other in order to improve their profits and dominate the market. —wikipedia description of cartels

-trigger price strategy

-firms set a specific price point (Trigger price),that, if undercut by a competitor to gain market share, will prompt a reaction from other firms in the market.

-the reaction aims to restore the competitive equilibrium.

-goal is to discourage firms from lowering prices as It might lead to price wars.

-mechanism to sustain higher prices in oligopolistic markets.

JEC CASE STUDY features

  • several instances where the cartel thought cheating had occurred, cut prices for a time and then returned to the collusive price

  • price, rather than quantity was used as the strategic variable of firms (cartels) in the rail-freight industry

  • wheat transported was subsequently exported overseas and the pricing was adjusted to compensated for variations in ocean shipping rates.

  • lake steamers and sailships were the principal source of competition for the railroads

  • predictable fluctuations in demand caused by the annual opening and closing of the Great Lakes shipping season did not disrupt industry behaviour. Rates were systematically adjusted in line with the lake navigation schedule

  • conduct of JEC was largely following a collusive equilibrium as price wars were caused by unpredictable disturbances rather than by predictable fluctuations in demand.



cartelstability <- read_csv("https://vincentarelbundock.github.io/Rdatasets/csv/AER/CartelStability.csv")
Rows: 328 Columns: 6
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (3): cartel, season, ice
dbl (3): rownames, price, quantity

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
cartelstability
# A tibble: 328 × 6
   rownames price cartel quantity season          ice  
      <dbl> <dbl> <chr>     <dbl> <chr>           <chr>
 1        1  0.4  yes       13632 Jan  1 - Jan 28 yes  
 2        2  0.4  yes       20035 Jan  1 - Jan 28 yes  
 3        3  0.4  yes       16319 Jan  1 - Jan 28 yes  
 4        4  0.4  yes       12603 Jan  1 - Jan 28 yes  
 5        5  0.4  yes       23079 Jan 29 - Feb 25 yes  
 6        6  0.4  yes       19652 Jan 29 - Feb 25 yes  
 7        7  0.4  yes       16211 Jan 29 - Feb 25 yes  
 8        8  0.4  yes       22914 Jan 29 - Feb 25 yes  
 9        9  0.4  yes       23710 Feb 26 - Mar 26 yes  
10       10  0.35 yes       23036 Feb 26 - Mar 26 yes  
# ℹ 318 more rows
glimpse(cartelstability)
## Rows: 328
## Columns: 6
## $ rownames <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18…
## $ price    <dbl> 0.40, 0.40, 0.40, 0.40, 0.40, 0.40, 0.40, 0.40, 0.40, 0.35, 0…
## $ cartel   <chr> "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes"…
## $ quantity <dbl> 13632, 20035, 16319, 12603, 23079, 19652, 16211, 22914, 23710…
## $ season   <chr> "Jan  1 - Jan 28", "Jan  1 - Jan 28", "Jan  1 - Jan 28", "Jan…
## $ ice      <chr> "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes"…
inspect(cartelstability)

categorical variables:  
    name     class levels   n missing
1 cartel character      2 328       0
2 season character     13 328       0
3    ice character      2 328       0
                                   distribution
1 yes (61.9%), no (38.1%)                      
2 Feb 26 - Mar 26 (8.5%) ...                   
3 no (57.3%), yes (42.7%)                      

quantitative variables:  
      name   class      min       Q1   median       Q3     max         mean
1 rownames numeric    1.000    82.75   164.50   246.25   328.0 1.645000e+02
2    price numeric    0.125     0.20     0.25     0.30     0.4 2.464939e-01
3 quantity numeric 4810.000 16604.00 23100.50 32389.00 76407.0 2.538439e+04
            sd   n missing
1 9.482967e+01 328       0
2 6.652626e-02 328       0
3 1.163277e+04 328       0


cartelstability_modified <- cartelstability %>%
  mutate(
    cartel = case_when(
      cartel == "yes" ~ "Cartel operational",
      cartel == "no" ~ "Cartel not operational",
      TRUE ~ "Unknown"  
    ) %>% as.factor(), 
    season = as.factor(season),
    ice = case_when(
         ice=="yes"~ "lakes frozen",
         ice=="no" ~ "lakes normal",
         TRUE ~ "Unknown") %>% as.factor()
  )

glimpse(cartelstability_modified)
Rows: 328
Columns: 6
$ rownames <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18…
$ price    <dbl> 0.40, 0.40, 0.40, 0.40, 0.40, 0.40, 0.40, 0.40, 0.40, 0.35, 0…
$ cartel   <fct> Cartel operational, Cartel operational, Cartel operational, C…
$ quantity <dbl> 13632, 20035, 16319, 12603, 23079, 19652, 16211, 22914, 23710…
$ season   <fct> Jan  1 - Jan 28, Jan  1 - Jan 28, Jan  1 - Jan 28, Jan  1 - J…
$ ice      <fct> lakes frozen, lakes frozen, lakes frozen, lakes frozen, lakes…

Qual variables- Cartel, Season, Ice

Quant variables- Price, Quantity

we refer back to the time interval mentioned in our description “weekly time series” to appropriately define our variables

facet the plot by lakes frozen not frozen

ggplot(data = cartel_summary, aes(x = season, y = avg_price_index, color = cartel, group = cartel)) +
  geom_line(size = 1) + 
  geom_point(size = 3) + 
  labs(
    title = "Price Index per ton of grain transported",
    x = "Season",
    y = "Avg Price Index"
  ) +
  facet_wrap(~ ice, ncol = 2, labeller = labeller(ice = c("frozen" = "lakes frozen", "not frozen" = "lakes normal"))) +
  theme_minimal(base_size = 14) + 
  theme(
    plot.title = element_text(hjust = 0.5, size = 18, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5, size = 14),
    axis.text.x = element_text(angle = 45, hjust = 1),
    legend.position = "bottom"
  )  

Inferences

  • When lakes are frozen, and cartels are operative, the price index is higher than when the cartels are not operating. Lakes being frozen reduces competition for the railways. cartels can enter collusive agreements and gain market power.

  • when lakes are not frozen, and cartels are operational, the price index fluctuates yet is still high, showing how external competition (shipping), increases competition among cartels, they might follow noncooperative behaviour and trigger price may get undercut in the process.